/*
 * Copyright (C), 2002-2017, 你的兔宝宝电子商务有限公司
 * FileName: DalClient.java
 * Author:   你的兔宝宝
 * Date:     2017-6-5 下午8:26:07
 * Description: 数据库操作客户端接口//模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.baby.demo.utils.dal;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.support.KeyHolder;

/**
 *  数据库操作客户端接口<br> 
 * 〈功能详细描述〉
 *
 * @author 你的兔宝宝
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface DalClient {
    
    /**
     * 
     * 功能描述: 查询单个记录<br>
     * 〈功能详细描述〉
     *
     * @param sqlId
     * @param params
     * @return
     * @Author:   你的兔宝宝
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> queryForMap(String sqlId, Map<String, Object> params);
    
    /**
     * 
     * 功能描述: 查询记录列表<br>
     * 〈功能详细描述〉
     *
     * @param sqlId
     * @param params
     * @return
     * @Author:   你的兔宝宝
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<Map<String, Object>> queryForList(String sqlId, Map<String, Object> params);
    
    /**
     * 
     * 功能描述: 分页查询<br>
     * 〈功能详细描述〉
     *
     * @param sqlId
     * @param params
     * @return {total,totalpage,list,page,pagesize}
     * @Author:   你的兔宝宝
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> queryForPage(String sqlId, Map<String, Object> params,int page,int pagesize);
    
    /**
     * 
     * 功能描述: 分页查询<br>
     * 〈功能详细描述〉
     *
     * @param sqlId
     * @param params{page,pagesize}
     * @return
     * @Author:   你的兔宝宝
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> queryForPage(String sqlId, Map<String, Object> params);
    
    /**
     * 
     * 功能描述: 执行sql、更新、删除或者修改<br>
     * 〈功能详细描述〉
     *
     * @param sqlId
     * @param params
     * @return
     * @Author:   你的兔宝宝
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int execute(String sqlId, Map<String, Object> params);
    
    /**
     * 
     * 功能描述: 执行sql返回主键、更新、删除或者修改<br>
     * 〈功能详细描述〉
     *
     * @param sqlId
     * @param params
     * @return
     * @Author:   你的兔宝宝
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Number executeForPK(String sqlId, Map<String, Object> params);
    
    /**
     * 
     * 功能描述: 批量操作、更新、删除或者修改<br>
     * 〈功能详细描述〉
     *
     * @param sqlId
     * @param batchValues
     * @return
     * @Author:   你的兔宝宝
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int[] batchUpdate(String sqlId, Map<String, Object>[] batchValues);
    
    /**
     * 
     * 功能描述: 批量操作、更新、删除或者修改<br>
     * 〈功能详细描述〉
     *
     * @param sqlId
     * @param params
     * @param keyHolder
     * @return
     * @Author:   你的兔宝宝
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Number executeForPK(String sqlId, Map<String, Object> params, KeyHolder keyHolder);
    
}
